package com.hdit.dao;

import java.util.Date;
import java.util.List;

import com.hdit.bean.Pager;
import com.hdit.entity.Auction;
import com.hdit.entity.Member;
import com.hdit.entity.Product;
import com.hdit.entity.ProductCategory;

/**
 * Dao接口 - 报价
 * ============================================================================
 */

public interface AuctionDao extends BaseDao<Auction, String> {
	
	
	
	/**
	 * 根据Product对象，获取此产品下的所有竞价
	 * 
	 * @param auction
	 *            报价
	 * 
	 * @return 此分类下的所有竞价集合
	 */
	public List<Auction> getAuctionList(Auction auction);
	
	
	
	
	/**
	 * 根据起始结果数、最大结果数，获取所有报价（只包含isMarketable=true的对象）
	 *            
	 * @param firstResult
	 *            起始结果数
	 *            
	 * @param maxResults
	 *            最大结果数
	 * 
	 * @return 此分类下的所有报价集合
	 */
	public List<Auction> getAuctionList(int firstResult, int maxResults);
	

	/**
	 * 根据起始日期、结束日期、起始结果数、最大结果数，获取报价集合（只包含isMarketable=true的对象）
	 * 
	 * @param beginDate
	 *            起始日期，为null则不限制起始日期
	 *            
	 * @param endDate
	 *            结束日期，为null则不限制结束日期
	 *            
	 * @param firstResult
	 *            起始结果数
	 *            
	 * @param maxResults
	 *            最大结果数
	 * 
	 * @return 此分类下的所有报价集合
	 */
	public List<Auction> getAuctionList(Date beginDate, Date endDate, int firstResult, int maxResults);
	

	/**
	 * 根据最大返回数获取所有精品报价(只包含isMarketable=true的对象，不限分类)
	 * 
	 * @param maxResults
	 *            最大返回数
	 * 
	 * @return 所有精品报价集合
	 */
	public List<Auction> getBestAuctionList(int maxResults);


	/**
	 * 根据最大返回数获取所有热卖报价(只包含isMarketable=true的对象，不限分类)
	 * 
	 * @param maxResults
	 *            最大返回数
	 * 
	 * @return 所有热卖报价集合
	 */
	public List<Auction> getHotAuctionList(int maxResults);


	/**
	 * 根据最大返回数获取最新报价(只包含isMarketable=true的对象，不限分类)
	 * 
	 * @param maxResults
	 *            最大返回数
	 * 
	 * @return 最新报价集合
	 */
	public List<Auction> getNewAuctionList(int maxResults);


	/**
	 * 根据Member、Pager获取收藏报价分页对象
	 * 
	 * @param member
	 *            Member对象
	 *            
	 * @return 收藏报价分页对象
	 */
	public Pager getFavoriteAuctionPager(Member member, Pager pager);
	
	/**
	 * 获取报价库存报警数
	 *            
	 * @return 报价库存报警数
	 */
	public Long getStoreAlertCount();
	
	/**
	 * 获取已上架报价数
	 *            
	 * @return 已上架报价数
	 */
	public Long getMarketableAuctionCount();
	
	/**
	 * 获取已下架报价数
	 *            
	 * @return 已下架报价数
	 */
	public Long getUnMarketableAuctionCount();
	
	
	public Auction getMaxAuctionPrice(String productid);

}